package GestionBilleterie;

import java.sql.SQLException;
import java.util.Date;
import java.util.List;

/**
 * Classe réprésentant un client du théatre
 * @author Aude Legrand, Alexandre Becquet
 */

public class Client {
	private int id;
    private String nom;
	private String prenom;
	private Date dateNaissance;
	private String adresse;
	private String numtel;
	private String email;

    /**
     * Constructeur de la classe Client sans identifiant de la BD
     * @param nom le nom du client
     * @param prenom le nom du client
     * @param dateNaissance la date de naissance du client
     * @param adresse l'adresse du client
     * @param numtel le numero de telephone du client
     * @param email l'email du client
     */
    public Client(String nom, String prenom, Date dateNaissance, String adresse, String numtel, String email){
        this.nom=nom;
        this.prenom=prenom;
        this.adresse=adresse;
        this.dateNaissance=dateNaissance;
        this.numtel=numtel;
        this.email=email;
        try {
            this.id=ClientBD.ajoutClient(this);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Constructeur de la classe Client pour un client récupéré de la BD
     * @param id l'id du client en base
     * @param nom le nom du client
     * @param prenom le nom du client
     * @param dateNaissance la date de naissance du client
     * @param adresse l'adresse du client
     * @param numtel le numero de telephone du client
     * @param email l'email du client
     */
    public Client(int id,String nom, String prenom, Date dateNaissance, String adresse, String numtel, String email){
        this.id=id;
        this.nom=nom;
        this.prenom=prenom;
        this.adresse=adresse;
        this.dateNaissance=dateNaissance;
        this.numtel=numtel;
        this.email=email;
    }

    /**
     * Recherche un client grâce à son id
     * @param clientId : L'id du client recherché
     * @return le client trouvé
     */
    public static Client findEntitie(int clientId) {
        Client c = null;
        try {
            c=ClientBD.readClient(clientId);
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return c;
    }
    
    /**
     * Retourne tous les clients
     * @return la liste des clients
     */
    public static List<Client> findEntities() {
        List<Client> lesClients = null;
        try {
            lesClients = ClientBD.readAllClient();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return lesClients;
    }

    /**
     * Modifier un client
     * @param unClient le client a modifié
     */
    public static void edit(Client unClient){
        try {
            ClientBD.updateClient(unClient);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Met à jour l'email du client.
     * @param email : le nouveau email
     */
    public void setEmail(String email) {
        this.email=email;
    }
    
    /**
     * Met à jour l'id du client.
     * @param id : le nouveau id
     */
    public void setId(int id){
        this.id=id;
    }

    /**
     * Retourne l'id du client.
     * @return l'id du client
     */
    public int getId() {
        return this.id;
	}

    /**
     * Retourne le nom du client
     * @return le nom du client
     */
	public String getNom() {
            return this.nom;
	}

    /**
     * Retourne le prénom du client
     * @return le prénom du client
     */
	public String getPrenom() {
            return this.prenom;
	}

    /**
     * Retourne la date de naissance du client
     * @return la date de naissance du client
     */
	public Date getDateNaissance() {
            return this.dateNaissance;
	}

    /**
     * Retourne l'adresse du client
     * @return l'adresse du client
     */
	public String getAdresse() {
            return this.adresse;
	}

    /**
     * Retourne le numéro de telephone du client
     * @return le numéro de telephone du client
     */
	public String getNumTelephone() {
        return this.numtel;
	}

    /**
     * Retourne l'email du client
     * @return l'email du client
     */
	public String getEmail() {
        return this.email;
	}

    /**
     * Met à jour le nom du vendeur
     * @param nom le nouveau nom
     */
    public void setNom(String nom) {
        this.nom=nom;
    }

    /**
     * Met à jour le prenom du vendeur
     * @param prenom le nouveau prenom
     */
    public void setPrenom(String prenom) {
        this.prenom=prenom;
    }

    /**
     * Met à jour le telephone du vendeur
     * @param telephone le nouveau telephone
     */
    public void setTelephone(String telephone) {
        this.numtel=telephone;
    }

    /**
     * Retourne une chaine de caractère representant le client
     * @return la chaîne de caractère représentant le client
     */
    public String toString(){
        return this.nom+" "+this.prenom;
    }
}
